Skip to main content

Transfer Order API - Inventory

Version 1.0 — May 2024

Authentication - Login API

To access the GraphQL APIs, users must first authenticate using the Xemelgo Login REST API.

Endpoint Details

  • URL: https://rest.api.xemelgo.com/login
  • Method: POST

Properties

PropertyTypeDescriptionRequired
emailStringbase64 Encoded email id for userYes
passwordStringbase64 encoded password for userYes

Password needs to be a minimum of 8 characters and should have a number in it.

Request Body

{
"email": "base64_encoded_email",
"password": "base64_encoded_password"
}

StatusCode - 200 on success

Response Body

{
"AccessToken": "$accessToken",
"ExpiresIn": 480,
"TokenType": "Bearer",
"RefreshToken": "$refreshToken",
"IdToken": "$idToken"
}

Use the $idToken as the authorization header for all API requests.

Errors

ErrorError codeException
In correct username and/or password400NotAuthorizedException

Create Inventory Transfer Order API

Create Inventory Transfer Order API allows to create the transfer order and keep track of the items associated with the transfer order.

Endpoint Details

  • URL: https://api.xemelgo.com/graphql
  • Method: POST

Properties

PropertyTypeDescriptionRequired
idStringTransfer order numberYes
transferFromIdStringSource locationNo
transferToIdStringDestination locationNo
entriesArrayList of SKU and the quantities (view table below)Yes
customPropertiesAWSJSONAdditional properties applicable to transfer ordersNo

entries

PropertyTypeDescriptionRequired
partIdStringItem type or SKUYes
totalQuantityNumberQuantity of the item type or SKUYes
unitStringUnit of measure (if applicable)No
inventory[CreateInventoryTransferOrderItemInput!]Detailed inventory items associated with the partNo

inventory

PropertyTypeDescriptionRequired
idStringUnique identifier of the inventory itemNo
trackerSerialStringEPC or tracker serial number for the inventoryNo

Headers

Authorization – $idToken

Request Body

mutation createInventoryTransferOrder {
createInventoryTransferOrder(
input: CreateInventoryTransferOrderInput!
) {
inventoryTransferOrder {
cancelledDate
creationDate
id
receivedDate
startDate
transferFrom {
customProperties
description
id
name
}
status
lastUpdatedDate
entries {
lastUpdatedDate
part {
customProperties
description
imagePath
name
id
number
quantity
unit
}
inventory {
trackerSerial
id
name
description
}
inTransitQuantity
receivedQuantity
unit
totalQuantity
}
transferTo {
customProperties
description
id
name
}
}
}
}
----------------------------------------------------------------------

CreateInventoryTransferOrderInput {
transferFromId: "Location A",
transferToId: "Location B",
entries: [
{
partId: "SKU-PART-1",
totalQuantity: 3,
unit: "lbs"
}
],
id: "TEST_TRANSFER_ORDER"
}

Status Code - 200

Response Body

InventoryTransferOrder {
id: String
status: TransferOrderStatus
transferFrom: LocationV2
transferTo: LocationV2
creationDate: AWSTimestamp
startDate: AWSTimestamp
completedDate: AWSTimestamp
cancelledDate: AWSTimestamp
entries: [InventoryTransferOrderEntry!]!
lastUpdatedDate: AWSTimestamp
customProperties: AWSJSON
}

Errors

ErrorError codeException
Expired token401Unauthorized
Invalid token401Unauthorized
Missing Authorization Header401Unauthorized

Error Response Examples

Expired Token

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "Token has expired."
}
]
}

Invalid token

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "Unable to parse JWT token"
}
]
}

Missing Authorization Header

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "User is not authorized to make this call."
}
]
}

Additional 200-Level Errors

ErrorError descriptionError code
ValidationErrorNo id provided, no entries, quantity ≤ 0, no item type, duplicate item type200
ResourceNotFoundErrorTracker serial does not exist200
UnexpectedErrorSome unexpected things happened on create, duplicate locations with the same identifier200
LocationNotFoundErrorFrom/to location not found200
ResourceAlreadyExistErrorTransfer order with this identifier already exists200

Update Transfer Order API

Update Transfer Order API allows you to modify an existing inventory transfer order, including updating source and destination locations, assigning or changing the tracker, and adding, removing, or updating parts associated with the order.

Endpoint Details

  • URL: https://api.xemelgo.com/graphql
  • Method: POST

Properties

PropertyTypeDescriptionRequired
idStringUnique identifier of the inventory transfer order to updateYes
trackerSerialStringUpdated tracker serial numberNo
transferFromIdStringUpdated source location IDNo
transferToIdStringUpdated destination location IDNo
addParts[CreateInventoryTransferOrderEntryInput!]List of new parts to add to the inventory transfer orderNo
removePartIds[String!]List of part entry IDs to remove from the transfer orderNo
updateParts[UpdateInventoryTransferOrderEntryInput!]List of part entries to update in the transfer orderNo
customPropertiesAWSJSONAdditional custom properties associated with the transfer orderNo

addParts

PropertyTypeDescriptionRequired
partIdStringItem type or SKUYes
totalQuantityNumberQuantity of the item type or SKUYes
unitStringUnit of measure (if applicable)No
inventory[CreateInventoryTransferOrderItemInput!]Detailed inventory items associated with the partNo

updateParts

PropertyTypeDescriptionRequired
partIdStringIdentifier for the part (e.g., SKU or item type)Yes
totalQuantityIntUpdated total quantity for the part in the transfer orderNo
addInventory[CreateInventoryTransferOrderItemInput!]List of inventory items to add (see details below)No
removeInventory[CreateInventoryTransferOrderItemInput!]List of inventory items to remove (see details below)No

inventory

PropertyTypeDescriptionRequired
idStringUnique identifier of the inventory itemNo
trackerSerialStringEPC or tracker serial number for the inventoryNo

addInventory

PropertyTypeDescriptionRequired
idStringUnique identifier of the inventory itemNo
trackerSerialStringEPC or tracker serial number for the inventoryNo

removeInventory

PropertyTypeDescriptionRequired
idStringUnique identifier of the inventory itemNo
trackerSerialStringEPC or tracker serial number for the inventoryNo

Headers

Authorization – $idToken

Request Body

mutation updateInventoryTransferOrder {
updateInventoryTransferOrder(
input: {
id: "TEST_INVENTORY_TRANSFER_ORDER"
trackerSerial: "XYZ-123"
transferFromId: "Location1"
transferToId: "Location2"
addParts: [
{
partId: "PART-001"
totalQuantity: 10
unit: "pcs"
inventory: [{ id: "INV-001", trackerSerial: "EPC-123" }]
}
]
removePartIds: ["PART-002"]
updateParts: [
{
partId: "PART-003"
totalQuantity: 5
addInventory: [{ id: "INV-005", trackerSerial: "EPC-999" }]
removeInventory: [{ id: "INV-004", trackerSerial: "EPC-888" }]
}
]
customProperties: "{\"color\": \"blue\"}"
}
) {
inventoryTransferOrder {
cancelledDate
creationDate
id
receivedDate
startDate
transferFrom {
customProperties
description
id
name
}
status
lastUpdatedDate
entries {
lastUpdatedDate
part {
customProperties
description
imagePath
name
id
number
quantity
unit
}
inventory {
trackerSerial
id
name
description
}
inTransitQuantity
receivedQuantity
unit
totalQuantity
}
transferTo {
customProperties
description
id
name
}
}
}
}

Status Code - 200

Response Body

InventoryTransferOrder {
id: String
status: InventoryTransferOrderStatus
transferFrom: LocationV2
transferTo: LocationV2
creationDate: AWSTimestamp
updateDate: AWSTimestamp
addParts: [InventoryTransferOrderEntry!]!
updateParts: [InventoryTransferOrderEntry!]!
customProperties: AWSJSON
}

Errors

ErrorError codeException
Expired token401Unauthorized
Invalid token401Unauthorized
Missing Authorization Header401Unauthorized

Error Response Examples

Expired Token

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "Token has expired."
}
]
}

Invalid token

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "Unable to parse JWT token"
}
]
}

Missing Authorization Header

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "User is not authorized to make this call."
}
]
}

Get Transfer Order API

Get Transfer Order API allows to retrieve the transfer order and view its status.

Endpoint Details

  • URL: https://api.xemelgo.com/graphql
  • Method: POST

Properties

PropertyTypeDescriptionRequired
idStringTransfer order numberYes

Headers

Authorization – $idToken

Request Body

query inventoryTransferOrder($id: String) {
inventoryTransferOrder(input: { id: $id }) {
inventoryTransferOrder {
cancelledDate
creationDate
id
receivedDate
startDate
transferFrom {
customProperties
description
id
name
}
status
lastUpdatedDate
entries {
lastUpdatedDate
part {
customProperties
description
imagePath
id
number
quantity
unit
}
inventory {
trackerSerial
id
name
description
}
inTransitQuantity
receivedQuantity
unit
totalQuantity
}
transferTo {
customProperties
description
id
name
}
}
}
}

Status Code - 200

Response Body

InventoryTransferOrder {
id: String
status: TransferOrderStatus
transferFrom: LocationV2
transferTo: LocationV2
creationDate: AWSTimestamp
startDate: AWSTimestamp
completedDate: AWSTimestamp
cancelledDate: AWSTimestamp
entries: [InventoryTransferOrderEntry!]!
lastUpdatedDate: AWSTimestamp
customProperties: AWSJSON
}

Errors

ErrorError codeException
Expired token401Unauthorized
Invalid token401Unauthorized
Missing Authorization Header401Unauthorized

Error Response Examples

Expired Token

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "Token has expired."
}
]
}

Invalid token

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "Unable to parse JWT token"
}
]
}

Missing Authorization Header

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "User is not authorized to make this call."
}
]
}

Additional 200-Level Errors

ErrorError descriptionError code
ValidationErrorNo id provided200
ResourceNotFoundErrorTransfer order not found200

List Transfer Orders API

List Transfer Orders API allows to retrieve all the transfer orders and view their statuses.

Endpoint Details

  • URL: https://api.xemelgo.com/graphql
  • Method: POST

Properties

PropertyTypeDescriptionRequired
filterStringFilter for transfer order propertiesNo
nextTokenStringPagination supportNo

Headers

Authorization – $idToken

Request Body

query inventoryTransferOrders($filter: String, $nextToken: String) {
inventoryTransferOrders(input: { filter: $filter, nextToken: $nextToken }) {
inventoryTransferOrders {
cancelledDate
creationDate
id
receivedDate
startDate
transferFrom {
customProperties
description
id
name
}
status
lastUpdatedDate
entries {
lastUpdatedDate
part {
customProperties
description
imagePath
name
id
number
quantity
unit
}
inventory {
trackerSerial
id
name
description
}
inTransitQuantity
receivedQuantity
unit
totalQuantity
}
transferTo {
customProperties
description
id
name
}
}
}
}

Status Code - 200

Response Body

InventoryTransferOrder {
id: String
status: TransferOrderStatus
transferFrom: LocationV2
transferTo: LocationV2
creationDate: AWSTimestamp
startDate: AWSTimestamp
completedDate: AWSTimestamp
cancelledDate: AWSTimestamp
entries: [InventoryTransferOrderEntry]!
lastUpdatedDate: AWSTimestamp
customProperties: AWSJSON
}

Errors

ErrorError codeException
Expired token401Unauthorized
Invalid token401Unauthorized
Missing Authorization Header401Unauthorized

Error Response Examples

Expired Token

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "Token has expired."
}
]
}

Invalid token

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "Unable to parse JWT token"
}
]
}

Missing Authorization Header

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "User is not authorized to make this call."
}
]
}

Delete Transfer Order API

Delete Transfer Order API allows to remove the transfer order.

Endpoint Details

  • URL: https://api.xemelgo.com/graphql
  • Method: POST

Properties

PropertyTypeDescriptionRequired
idStringTransfer order numberYes

Headers

Authorization – $idToken

Request Body

mutation deleteInventoryTransferOrder {
deleteInventoryTransferOrder(input: { id: "TEST_TRANSFER_ORDER" }) {
inventoryTransferOrder {
cancelledDate
creationDate
id
receivedDate
startDate
transferFrom {
customProperties
description
id
name
}
status
lastUpdatedDate
entries {
lastUpdatedDate
part {
customProperties
description
imagePath
name
id
number
quantity
unit
}
inventory {
trackerSerial
id
name
description
}
inTransitQuantity
receivedQuantity
unit
totalQuantity
}
transferTo {
customProperties
description
id
name
}
}
}
}

Status Code - 200

Response Body

InventoryTransferOrder {
id: String
status: TransferOrderStatus
transferFrom: LocationV2
transferTo: LocationV2
creationDate: AWSTimestamp
startDate: AWSTimestamp
completedDate: AWSTimestamp
cancelledDate: AWSTimestamp
entries: [InventoryTransferOrderEntry!]!
lastUpdatedDate: AWSTimestamp
customProperties: AWSJSON
}

Errors

ErrorError codeException
Expired token401Unauthorized
Invalid token401Unauthorized
Missing Authorization Header401Unauthorized

Error Response Examples

Expired Token

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "Token has expired."
}
]
}

Invalid token

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "Unable to parse JWT token"
}
]
}

Missing Authorization Header

{
"errors": [
{
"errorType": "UnauthorizedException",
"message": "User is not authorized to make this call."
}
]
}

Additional 200-Level Errors

ErrorError descriptionError code
ValidationErrorNo id provided200
ResourceNotFoundErrorTransfer order not found200